package com.gitee.liuzhi.design;

import lombok.extern.slf4j.Slf4j;

/**
 * @Author liuzhi
 * @Date 2023/5/14 00:06
 * @Version 1.0
 * @Description 欢迎学习设计模式~
 */
@Slf4j
public class DesignMain {

    // 设计模式的六大原则
    /*
    一. 开闭原则
        对扩展开放, 对修改关闭
        在程序需要进行拓展的时候, 不能去修改原有的代码, 实现一个热插拔的效果

    二. 里氏代换原则
        子类可以替换父类出现在父类可以出现的任何地方
        LSP 是继承复用的基石, 只有当派生类可以替换掉基类, 且软件单位的功能不受到影响时, 基类才能真正被复用
        而派生类也能够在基类的基础上增加新的行为

    三. 依赖倒置原则
        针对接口编程, 依赖于抽象而不依赖于具体 (依赖抽象, 注入实现)

    四. 接口隔离原则
        使用多个隔离的接口, 比使用单个接口要好 (降低类之间的耦合度)

    五. 迪米特法则 最少知道原则
        一个实体应当尽量少地与其他实体之间发生相互作用, 使得系统功能模块相对独立

    六. 合成复用原则
        尽量使用合成/聚合/组合的方式, 而不是使用继承
        组合是通过对现有的对象进行拼装(组合)产生新的、更复杂的功能, 过多的继承会造成类急速变“重”
     */

    // 设计模式的类型
    /*
    一. 创建型模式
        创建型设计模式关注对象的创建
        创建对象的同时隐藏创建逻辑的方式, 而不是使用 new 运算符直接实例化对象

    二. 结构型模式
        结构型设计模式关注类和对象的组合
        继承的概念被用来组合接口和定义组合对象获得新功能的方式

    三. 行为型模式
        行为型设计模式关注对象之间的通信
     */

    public static void main(String[] args) {
        log.info("study design model, haha!!!");
    }

}
